// 导入 globals 模块，用于定义全局变量
import globals from "globals";
// 导入 @eslint/js 插件，提供 JavaScript 代码的 ESLint 规则
import pluginJs from "@eslint/js";
// 导入 typescript-eslint 插件，用于处理 TypeScript 代码的 ESLint 规则
import tseslint from "typescript-eslint";
// 导入 eslint-plugin-vue 插件，提供 Vue 代码的 ESLint 规则
import pluginVue from "eslint-plugin-vue";

/**
 * @type {import('eslint').Linter.Config[]}
 * 此数组包含了一系列 ESLint 配置对象，用于定义项目的代码检查规则。
 */
export default [
  // 定义 ESLint 检查的文件类型，包括 JavaScript、TypeScript 和 Vue 文件
  { files: ["**/*.{js,mjs,cjs,ts,vue}"] },
  // 设置语言选项，指定全局变量为浏览器环境的全局变量
  { languageOptions: { globals: globals.browser } },
  // 定义 ESLint 忽略检查的文件和目录
  { ignores: ["node_modules", "**/*.d.ts", "commitlint.config.cjs"] },
  // 使用 @eslint/js 插件的推荐规则
  pluginJs.configs.recommended,
  // 使用 typescript-eslint 插件的推荐规则
  ...tseslint.configs.recommended,
  // 使用 eslint-plugin-vue 插件的基本规则
  ...pluginVue.configs["flat/essential"],
  // 针对 Vue 文件，设置解析器选项为 typescript-eslint 的解析器
  { files: ["**/*.vue"], languageOptions: { parserOptions: { parser: tseslint.parser } } },
  // 定义额外的全局变量，并将其设置为只读
  {
    globals: {
      defineProps: "readonly",
      defineEmits: "readonly",
      defineExpose: "readonly",
      withDefaults: "readonly",
      defineStore: "readonly",
    },
  },
];
